package com.xbongbong.saas.help;

import com.xbongbong.i18n.util.I18nMessageUtil;
import com.xbongbong.paas.toolbox.util.DateUtil;
import com.xbongbong.paas.toolbox.util.StringUtil;
import com.xbongbong.pro.constant.CommonConstant;
import com.xbongbong.pro.enums.TimeTypeEnum;
import com.xbongbong.pro.index.pojo.IndexFilterDataPojo;
import com.xbongbong.pro.index.pojo.IndexInitPojo;
import com.xbongbong.pro.statistic.enums.ChartCategoryAliasEnum;
import com.xbongbong.sys.enums.CompanyStructTypeEnum;
import com.xbongbong.sys.enums.DataPermissionEnum;
import org.checkerframework.checker.units.qual.A;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * @description: 首页看板帮助类
 * @Author: hongxiao
 * @date: 2019-03-29 11:20
 * @since v1.0
 */
@Component
public class IndexHelp {
    /**
     * 根据别名获取实体
     *
     * @param list  展示内容列表
     * @param alias 别名
     * @return
     * @throws
     * @author hongxiao
     * @date: 2019-03-25 21:34
     * @version v1.0
     * @since v1.0
     */
    public IndexInitPojo getPojoByAlias(List<IndexInitPojo> list, String alias) {
        if (list == null || list.size() == 0 || StringUtil.isEmpty(alias)) {
            return null;
        }
        for (IndexInitPojo setPojo : list) {
            if (alias.equals(setPojo.getAlias())) {
                return setPojo;
            }
        }
        return null;
    }

    /**
     * 根据别名删除首页看板展示内容
     *
     * @param list  展示内容列表
     * @param alias 别名
     * @return
     * @throws
     * @author hongxiao
     * @date: 2019-03-25 21:30
     * @version v1.0
     * @since v1.0
     */
    public void removePojoByAlias(List<IndexInitPojo> list, String alias) {
        if (list == null || list.size() == 0 || StringUtil.isEmpty(alias)) {
            return;
        }
        Iterator<IndexInitPojo> it = list.iterator();
        while (it.hasNext()) {
            IndexInitPojo setPojo = it.next();
            if (setPojo.getAlias() != null && setPojo.getAlias().equals(alias)) {
                it.remove();
                return;
            }
        }
    }

    /**
     * 根据别名替换实体
     *
     * @param list     列表
     * @param initPojo pojo实体
     * @param alias    别名
     * @return
     * @throws
     * @author hongxiao
     * @date: 2019-03-29 13:39
     * @version v1.0
     * @since v1.0
     */
    public void replacePojoByAlias(List<IndexInitPojo> list, IndexInitPojo initPojo, String alias) {
        if (list == null || list.size() == 0 || initPojo == null || StringUtil.isEmpty(alias)) {
            return;
        }
        for (int i = 0; i < list.size(); i++) {
            IndexInitPojo setPojo = list.get(i);
            if (alias.equals(setPojo.getAlias())) {
                list.set(i, initPojo);
                break;
            }
        }
    }

    /**
     * 获取看板默认配置
     *
     * @param alias
     * @return
     * @throws
     * @author hongxiao
     * @date: 2019-03-22 17:32
     * @version v1.0
     * @since v1.0
     */
    public Integer webLeftBoardDefaultSort(String alias) {
        // 默认从20递减
        Map<String, Integer> sortMap = new HashMap<>(8);
        // 简报看板
        sortMap.put(ChartCategoryAliasEnum.REPORT_BOARD.getAlias(), 20);
        // 业绩目标
        sortMap.put(ChartCategoryAliasEnum.PERFORMANCE.getAlias(), 19);
        // PK榜
        sortMap.put(ChartCategoryAliasEnum.PK.getAlias(), 18);
        // 客户分析
        sortMap.put(ChartCategoryAliasEnum.CUSTOMER.getAlias(), 17);
        // 机会分析
        sortMap.put(ChartCategoryAliasEnum.OPPORTUNITY.getAlias(), 16);
        // 合同分析
        sortMap.put(ChartCategoryAliasEnum.CONTRACT.getAlias(), 15);
        // 回款分析
        sortMap.put(ChartCategoryAliasEnum.PAYMENT.getAlias(), 14);
        // 付款分析
        sortMap.put(ChartCategoryAliasEnum.PAY.getAlias(), 13);
        // 采购分析
        sortMap.put(ChartCategoryAliasEnum.PURCHASE.getAlias(), 12);
        // 工单分析
        sortMap.put(ChartCategoryAliasEnum.WORK_ORDER.getAlias(), 11);
        if (sortMap.containsKey(alias)) {
            return sortMap.get(alias);
        }
        return 0;
    }

    /**
     * 获取看板默认配置
     *
     * @param alias
     * @return
     * @throws
     * @author hongxiao
     * @date: 2019-03-22 17:32
     * @version v1.0
     * @since v1.0
     */
    public Integer webRightBoardDefaultSort(String alias) {
        // 默认从20递减
        Map<String, Integer> sortMap = new HashMap<>(8);
        // 销售简报
        sortMap.put(ChartCategoryAliasEnum.SALES_REPORT.getAlias(), 20);
        // 更新公告
        sortMap.put(ChartCategoryAliasEnum.ANNOUNCEMENT.getAlias(), 19);
        // 待处理审批
        sortMap.put(ChartCategoryAliasEnum.APPROVAL.getAlias(), 18);
        // 审批进展
        sortMap.put(ChartCategoryAliasEnum.APPROVAL_PROGRESS.getAlias(), 17);
        // 访客计划
        sortMap.put(ChartCategoryAliasEnum.COMMUNICATE_PLAN.getAlias(), 16);
        // 跟进提醒
        sortMap.put(ChartCategoryAliasEnum.REMIND.getAlias(), 15);
        // 遗忘提醒
        sortMap.put(ChartCategoryAliasEnum.FORGET_REMIND.getAlias(), 14);
        // 库存预警
        sortMap.put(ChartCategoryAliasEnum.STOCK_WARNING.getAlias(), 13);
        // 客户关怀
        sortMap.put(ChartCategoryAliasEnum.CUSTOMER_CARE.getAlias(), 12);
        // 客服
        sortMap.put(ChartCategoryAliasEnum.KE_FU.getAlias(), 11);
        // 数据预警
        sortMap.put(ChartCategoryAliasEnum.DATA_WARNING.getAlias(), 10);

        if (sortMap.containsKey(alias)) {
            return sortMap.get(alias);
        }

        return 0;
    }

    /**
     * 获取右侧看板默认配置
     * @return
     */
    public List<String> getRightBoardAlias() {
        // 默认从20递减
        List<String> list = new ArrayList<>();
        // 销售简报
        list.add(ChartCategoryAliasEnum.SALES_REPORT.getAlias());
        // 更新公告
        list.add(ChartCategoryAliasEnum.ANNOUNCEMENT.getAlias());
        // 待处理审批
        list.add(ChartCategoryAliasEnum.APPROVAL.getAlias());
        // 审批进展
        list.add(ChartCategoryAliasEnum.APPROVAL_PROGRESS.getAlias());
        // 访客计划
        list.add(ChartCategoryAliasEnum.COMMUNICATE_PLAN.getAlias());
        // 跟进提醒
        list.add(ChartCategoryAliasEnum.REMIND.getAlias());
        // 遗忘提醒
        list.add(ChartCategoryAliasEnum.FORGET_REMIND.getAlias());
        // 库存预警
        list.add(ChartCategoryAliasEnum.STOCK_WARNING.getAlias());
        // 客户关怀
        list.add(ChartCategoryAliasEnum.CUSTOMER_CARE.getAlias());
        // 客服
        list.add(ChartCategoryAliasEnum.KE_FU.getAlias());
        // 数据预警
        list.add(ChartCategoryAliasEnum.DATA_WARNING.getAlias());
        return list;
    }

    /**
     * 获取看板默认配置
     *
     * @param alias
     * @return
     * @throws
     * @author hongxiao
     * @date: 2019-03-22 17:32
     * @version v1.0
     * @since v1.0
     */
    public Integer appBoardDefaultSort(String alias) {
        // 默认从30递减
        Map<String, Integer> sortMap = new HashMap<>(8);
        // 销售简报
        sortMap.put(ChartCategoryAliasEnum.SALES_REPORT.getAlias(), 30);
        // 待处理审批
        sortMap.put(ChartCategoryAliasEnum.APPROVAL.getAlias(), 29);
        // 审批进展
        sortMap.put(ChartCategoryAliasEnum.APPROVAL_PROGRESS.getAlias(), 28);
        // 简报看板
        sortMap.put(ChartCategoryAliasEnum.REPORT_BOARD.getAlias(), 27);
        // 业绩完成情况
        sortMap.put(ChartCategoryAliasEnum.PERFORMANCE.getAlias(), 26);
        // pk榜
        sortMap.put(ChartCategoryAliasEnum.PK.getAlias(), 25);
        // 访客计划
        sortMap.put(ChartCategoryAliasEnum.COMMUNICATE_PLAN.getAlias(), 24);
        // 跟进提醒
        sortMap.put(ChartCategoryAliasEnum.REMIND.getAlias(), 23);
        // 遗忘提醒
        sortMap.put(ChartCategoryAliasEnum.FORGET_REMIND.getAlias(), 22);
        // 库存预警
        sortMap.put(ChartCategoryAliasEnum.STOCK_WARNING.getAlias(), 21);
        // 客户分析
        sortMap.put(ChartCategoryAliasEnum.CUSTOMER.getAlias(), 20);
        // 机会分析
        sortMap.put(ChartCategoryAliasEnum.OPPORTUNITY.getAlias(), 19);
        // 合同分析
        sortMap.put(ChartCategoryAliasEnum.CONTRACT.getAlias(), 18);
        // 回款分析
        sortMap.put(ChartCategoryAliasEnum.PAYMENT.getAlias(), 17);
        // 付款分析
        sortMap.put(ChartCategoryAliasEnum.PAY.getAlias(), 16);
        // 采购分析
        sortMap.put(ChartCategoryAliasEnum.PURCHASE.getAlias(), 15);
        // 工单分析
        sortMap.put(ChartCategoryAliasEnum.WORK_ORDER.getAlias(), 14);
        // 数据预警
        sortMap.put(ChartCategoryAliasEnum.DATA_WARNING.getAlias(), 13);

        if (sortMap.containsKey(alias)) {
            return sortMap.get(alias);
        }

        return 0;
    }

    /**
     * 获取首页默认筛选项
     * 组织架构：默认为个人或全公司
     * 时间筛选：默认为本月
     *
     * @param userId         员工id
     * @param userName       员工名称
     * @param dataPermission 数据权限
     * @return
     * @throws
     * @author hongxiao
     * @date: 2019-03-02 12:15
     * @version v1.0
     * @since v1.0
     */
    public IndexFilterDataPojo getDefaultFilter(String userId, String userName, Integer dataPermission) {
        IndexFilterDataPojo dataPojo = new IndexFilterDataPojo();
        // 默认为个人
        dataPojo.setCheckedUserId(userId);
        dataPojo.setUserName(userName);
        dataPojo.setCompanyStructType(CompanyStructTypeEnum.USER.getCode());
        // 权限为5时，默认为部门
        if (DataPermissionEnum.ALL.getCode().equals(dataPermission)) {
            dataPojo.setCheckedDepId(1L);
            dataPojo.setCheckedUserId(null);
            dataPojo.setUserName(I18nMessageUtil.getMessage(CommonConstant.COMPANY_WIDE));
            dataPojo.setCompanyStructType(CompanyStructTypeEnum.DEPARTMENT.getCode());
        }
        // 时间筛选默认为本月
        dataPojo.setTimeType(TimeTypeEnum.MONTH.getCode());
        dataPojo.setTimeName(TimeTypeEnum.MONTH.getName());

        return dataPojo;
    }
}
